home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
pao
/
towns
/
cdplay
/
src
/
cdpn.h
< prev
next >
Wrap
Text File
|
1991-10-18
|
12KB
|
333 lines
/* << High C V1.4 >> **********************************************************
**
** CD 演奏ライブラリを使用したプログラム用ヘッダ
**
** 1991.03.19 : CREATE
** 1991.03.23 : FINISH
**
** < HISTORY >
** 1991.03.19 : CREATE
**
** < note > : TABS = 4
**
** All Rights Reserved, Copyright (C) Y.Hirata 1991.
**
** Programmed by Y.Hirata ( Nifty ID : NAB03321 )
**
******************************************************************************/
#include "cdda.h"
#define ZERO CDDA_ZERO
#define TRUE CDDA_TRUE
#define FALSE ZERO
#define DUMMY ZERO
#undef EX
#ifdef _CDPN_MAIN /* メインルーチン用 */
#define EX
#else /* 外部ルーチン用 */
#define EX extern
#endif
enum Values_for_Write_Mode {
PSET, PRESET, OR, AND, XOR, NOT, MATTE, PASTEL, /* 0 ~ 7 */
DUMMY_1, OPAQUE, IMPSET, INPNOT, MASKSET, MASKRESET, MASKNOT
/* 8 ~ 15 */
} ;
#define GworkSize 1536 /* グラフィック作業域のサイズ */
EX char Gwork[GworkSize] ; /* グラフィック作業域 */
#define SworkSize 16384 /* サウンド用作業域サイズ */
EX char Swork[SworkSize]; /* サウンド用作業域 */
#define MworkSize 4096 /* マウス作業域のサイズ */
EX char Mwork[MworkSize] ; /* マウス作業域 */
EX char *Wpagebuf ; /* 作業ページ領域 */
#define WPAGE 0x80 /* 作業ページ */
EX char Textbuf[80] ; /* 文字表示用作業域 */
#define EJECT_SND "EJECT.SND"
#define RESET_SND "RESET.SND"
#define STOP_SND "STOP.SND"
#define EXIT_SND "EXIT.SND"
#define EJECT_CH 71
#define RESET_CH 70
#define STOP_CH 69
#define EXIT_CH 68
#define XCDOT 8 /* 文字サイズ(x方向) */
#define YCDOT 16 /* 文字サイズ(y方向) */
#define XCDOT7P 6 /* 7ポ用文字サイズ(x方向) */
#define YCDOT7P 7 /* 7ポ用文字サイズ(y方向) */
#define XCDOT9P 6 /* 9ポ用文字サイズ(x方向) */
#define YCDOT9P 9 /* 9ポ用文字サイズ(y方向) */
#define MOS_LEFT 1 /* マウス左クリック */
#define MOS_RIGHT 2 /* マウス右クリック */
#define MOS_BOTH 3 /* マウス左右クリック */
#define CDC_WAIT 12 /* CDC アクセス待ち時間 240ms */
#define PRG_WAIT 150 /* プログラム用曲表示時間 3.0sec */
#define NOA_WAIT 9000 /* 未アクセスチェック時間 180.0sec */
EX long Tcount1 ; /* CDC ウェイト用 */
EX long Tcount2 ; /* 時間表示制御用 */
EX long Tcount3 ; /* 未アクセス時間チェック用 */
/*-----------------------------------------------------------------------------
** 色番号定義
-----------------------------------------------------------------------------*/
enum Values_for_Write_Color {
C_BLACK, C_BLUE, C_RED, C_PURPLE,
C_GREEN, C_SKYBLUE, C_YELLOW, C_WHITE,
C_GRAY, C_BLUEOFF, C_GREENOFF, C_GREENON,
C_REDOFF, C_REDON, C_LWHITE, C_HWHITE
} ;
/*-----------------------------------------------------------------------------
** パレット定義
-----------------------------------------------------------------------------*/
#ifdef _CDPN_MAIN /* メインルーチン用 */
unsigned char Palette[16][3]= {/* B R G : 上位 4ビット */
/* 00 */ 0, 0, 0, /* C_BLACK (NORMAL)*/
/* 01 */ 176, 0, 0, /* C_BLUE (NORMAL)*/
/* 02 */ 0,176, 0, /* C_RED */
/* 03 */ 176,176, 0, /* C_PURPLE (NORMAL)*/
/* 04 */ 0, 0,208, /* C_GREEN */
/* 05 */ 176, 0,176, /* C_SKYBLUE (NORMAL)*/
/* 06 */ 0,208,208, /* C_YELLOW */
/* 07 */ 192,192,192, /* C_WHITE */
/* 08 */ 80, 80, 80, /* C_GRAY */
/* 09 */ 64, 0, 0, /* C_BLUEOFF */
/* 10 */ 0, 0, 64, /* C_GREENOFF */
/* 11 */ 0, 0,255, /* C_GREENON */
/* 12 */ 0, 64, 0, /* C_REDOFF */
/* 13 */ 0,255, 0, /* C_REDON */
/* 14 */ 128,128,128, /* C_LWHITE */
/* 15 */ 255,255,255 /* C_HWHITE (NORMAL)*/
} ;
#else /* 外部ルーチン用 */
EX unsigned char Palette[16][3] ;
#endif
/*-----------------------------------------------------------------------------
** 表示色定義
-----------------------------------------------------------------------------*/
#define COLOR_TITLE C_GREENON
#define COLOR_ERROR C_REDON
#define COLOR_WARNING C_YELLOW
#define COLOR_TITLE_BACK C_BLUEOFF
#define COLOR_SCREEN_BACK C_LWHITE
#define COLOR_SWITCH_WORD C_BLACK
#define COLOR_INFO_BOX0 C_BLACK
#define COLOR_INFO_BOX1 C_HWHITE
#define COLOR_INFO_TITLE C_GREEN
#define COLOR_INFO_ON C_WHITE
#define COLOR_INFO_OFF C_GRAY
#define COLOR_INFO_TAPE C_YELLOW
#define COLOR_INFO_DATA C_BLUEOFF
#define COLOR_INFO_TOTAL C_GREENON
#define COLOR_INFO_BACK C_LWHITE
#define COLOR_TIME_BOX0 C_BLACK
#define COLOR_TIME_BOX1 C_HWHITE
#define COLOR_TIME C_HWHITE
#define COLOR_TIME_PROG C_REDON
#define COLOR_TIME_DISC C_GREEN
#define COLOR_TIME_INFO C_WHITE
#define COLOR_TIME_MUSIC C_GREENON
#define COLOR_TIME_PRG C_YELLOW
#define COLOR_TIME_BACK C_GREENOFF
#define COLOR_MODE_PROGRAM C_REDON
#define COLOR_MODE_SINGLE C_YELLOW
#define COLOR_MODE_CONTINUE C_GREENON
#define COLOR_EVOL_BACK C_GRAY
#define COLOR_EVOL_MUTE C_YELLOW
#define COLOR_EVOL_MAX C_REDON
#define COLOR_EVOL_MIN C_BLUEOFF
#define COLOR_EVOL C_REDON
#define COLOR_XOR C_GREENOFF
/*-----------------------------------------------------------------------------
** 構造体定義
-----------------------------------------------------------------------------*/
struct _XY_POINT {
short x, y ;
} ;
struct _POSITION {
struct _XY_POINT s ; /* 左上座標 */
struct _XY_POINT e ; /* 右下座標 */
} ;
/*-----------------------------------------------------------------------------
** スイッチ定義(座標定義)
-----------------------------------------------------------------------------*/
#define SWPOINT 17 /* スイッチの数 */
#define SWVAL (CDDA_MAX_TRACK+10) /* スイッチと曲番号認識用 */
enum Values_for_Switch {
SW_EXIT, SW_TIME, SW_CHECK, SW_CLEAR,
SW_SHUFFLE, SW_REPEAT, SW_STOP, SW_PLAY,
SW_REWMUSIC,SW_REWTIME, SW_PAUSE, SW_FFTIME,
SW_FFMUSIC, SW_PROGRAM, SW_SINGLE, SW_CONTINUE,
SW_ELEVOL
} ;
#define SW_TOTAL (CDDA_MAX_TRACK+1) /* 合計時間用(テープセレクト兼) */
#ifdef _CDPN_MAIN /* メインルーチン用 */
struct _POSITION Position[SWPOINT] = {
{ { 8, 34}, { 31, 57} }, /* EXIT */
{ { 40, 30}, {199, 77} }, /* TIME */
{ {212, 36}, {259, 51} }, /* CHECK */
{ {212, 56}, {259, 71} }, /* CLEAR */
{ {268, 36}, {315, 51} }, /* SHUFFLE */
{ {268, 56}, {315, 71} }, /* REPEAT */
{ {324, 36}, {355, 71} }, /* STOP */
{ {360, 36}, {391, 71} }, /* PLAY */
{ {400, 36}, {423, 71} }, /* REWMUSIC */
{ {428, 36}, {451, 71} }, /* REWTIME */
{ {456, 36}, {479, 71} }, /* PAUSE */
{ {484, 36}, {507, 71} }, /* FFTIME */
{ {512, 36}, {535, 71} }, /* FFMUSIC */
{ {544, 30}, {567, 53} }, /* PROGRAM */
{ {576, 30}, {599, 53} }, /* SINGLE */
{ {608, 30}, {631, 53} }, /* CONTINUE */
{ {544, 66}, {631, 77} } /* ELEVOL */
} ;
struct _XY_POINT PSTitle = { 17, 6 } ; /* タイトル表示開始位置 */
struct _XY_POINT PSSwitch = { 0, 22 } ; /* スイッチボタン表示開始位置 */
struct _XY_POINT PSInf = { 17, 85 } ; /* 曲情報の表示開始位置 */
struct _XY_POINT SZInf = { 606,358 } ; /* 曲情報の表示サイズ */
struct _XY_POINT PSMsg = { 17,443 } ; /* メッセージの表示開始位置 */
struct _XY_POINT SZMsg = { 606, 37 } ; /* メッセージの表示サイズ */
#else /* 外部ルーチン用 */
EX struct _POSITION Position[SWPOINT] ;
EX struct _XY_POINT PSTitle ;
EX struct _XY_POINT PSSwitch ;
EX struct _XY_POINT PSInf ;
EX struct _XY_POINT SZInf ;
EX struct _XY_POINT PSMsg ;
EX struct _XY_POINT SZMsg ;
#endif
/*-----------------------------------------------------------------------------
** 状態保持用グローバル変数(プログラム側で初期化すること)
-----------------------------------------------------------------------------*/
EX char Swstat[SWPOINT] ; /* スイッチのON/OFF状態 */
EX char Infstat[CDDA_MAX_TRACK] ; /* 曲情報の表示状態 */
enum Values_for_Time_Mode {
TM_NODISP, /* 時間表示なし */
TM_TR_CLOCK, /* 曲内経過時間 */
TM_TR_TIME, /* 曲内残り時間 */
TM_DISC_CLOCK, /* ディスク内経過時間 */
TM_DISC_TIME, /* ディスク内残り時間 */
TM_ALL /* 全時間情報 */
} ;
EX int Timemode ;
struct _FLG {
char pause ; /* PAUSE中か? */
char repeat ; /* リピートありか? */
char shuffle ; /* シャッフル演奏中か? */
char playon ; /* 演奏を開始したのか? */
char program ; /* プログラム演奏を開始したか? */
char prgchk ; /* プログラム曲を確認中か? */
char mute ; /* 音出力をミュート中か? */
char mouse ; /* マウス 表示中か? */
char tape ; /* 録音テープ選択済か? */
} ;
EX struct _FLG Flg ; /* 制御フラグ */
EX int Playmode ; /* 演奏モード */
EX int Evol ; /* 電子ボリューム値 */
EX int XORno ; /* 反転表示している曲番号 */
EX int Mosbot ; /* マウス選択された時点のボタン */
EX int Mosx ; /* マウス選択された時点の水平座標 */
EX int Mosy ; /* マウス選択された時点の垂直座標 */
EX int Status ; /* 前回の演奏状態 */
EX int Musicno ; /* 前回演奏していた曲番号 */
EX int Dispno ; /* 表示した曲番号 */
EX int Dispmin ; /* 表示した時間(分) */
EX int Dispsec ; /* 表示した時間(秒) */
EX int Dispmode ; /* 表示した時間モード */
EX int Prgcnt[CDDA_MAX_TRACK] ; /* プログラム設定されたカウント値 */
EX int Prginf[CDDA_MAX_TRACK] ; /* プログラム設定された曲の演奏情報 */
/*-----------------------------------------------------------------------------
** プロトタイプ宣言
-----------------------------------------------------------------------------*/
/*
** CDPN.C
*/
void palinit( void ) ;
void timer_init( void ) ;
void timer_end( void ) ;
void valinit( void ) ;
void mossetpos( int ) ;
void init( void ) ;
void mosloop( int,int *,int *,int * ) ;
int tapeselecton( void ) ;
int mosevent( int * ) ;
void checkmusic( int ) ;
void checkswitch( void ) ;
void checkdisp_playmusic( void ) ;
void checkdisp_stopmusic( void ) ;
void checkdisp_eject( void ) ;
void checkdisp_reset( void ) ;
void checkstatus( void ) ;
void selectmusic( int ) ;
void selectmode( int ) ;
void selectffrew( int ) ;
void selectplay( int ) ;
void selectstop( int ) ;
void selectprogramsw( int ) ;
void selectelevol( void ) ;
void debugevent( int ) ;
int event( void ) ;
void start( void ) ;
/*
** CDPNDISP.C
*/
void dispmouse( int ) ;
void dispmsgclear( void ) ;
void disperrormsg( int ) ;
void disptitle( void ) ;
void dispexit( int ) ;
void dispprogramtime( void ) ;
int disptimemouse( int ) ;
void disptimeinfo( void ) ;
void disptimeprgsw( void ) ;
void disptimebox( void ) ;
int disptimemusicno( int ) ;
void disptimeclock( void ) ;
void disptime( int,int ) ;
void dispcheck( int,int ) ;
void dispclear( int,int ) ;
void dispshuffle( int ) ;
void disprepeat( int ) ;
void dispstop( int ) ;
void dispplay( int ) ;
void disprewmusic( int ) ;
void disprewtime( int ) ;
void disppause( int ) ;
void dispfftime( int ) ;
void dispffmusic( int ) ;
void dispprogram( int ) ;
void dispsingle( int ) ;
void dispcontinue( int ) ;
void dispelevolbox( int ) ;
void dispelevol( void ) ;
void dispword( void ) ;
void dispswitch( void ) ;
void dispselectmusicno( int ) ;
void dispmusicno( int,int ) ;
void dispswitch_check( int ) ;
void dispevent( int,int ) ;
void disptocclear( void ) ;
void disptoc( char ) ;
void disptocmode( int,int ) ;
#undef EX